package com.baoyouqun.domain.VO;

import com.baoyouqun.domain.Enum.SystemConfigType;
import com.baoyouqun.entity.SystemConfig;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.Objects;

@Data
public class InviteFriendDTO {

    private String id;

    @ApiModelProperty(value = "是否赠送")
    private Boolean enabled;

    @ApiModelProperty(value = "奖励积分")
    private Long rewardAmount;

    @ApiModelProperty(value = "每日积分上限 是否启用")
    private Boolean enabledDailyLimit;

    @ApiModelProperty(value = "每日上限")
    private Long dailyLimit;

    /**
     * 从SystemConfig转换（按类型匹配）
     */
    public static InviteFriendDTO fromSystemConfig(SystemConfig systemConfig) {
        if (systemConfig == null || !SystemConfigType.INVITE_FRIEND.equals(systemConfig.getConfigType())) {
            throw new IllegalArgumentException("无效的邀请好友配置数据");
        }

        InviteFriendDTO dto = new InviteFriendDTO();
        dto.setId(systemConfig.getId());
        // Boolean -> Boolean
        dto.setEnabled(systemConfig.getInfo1()); // info1是Boolean
        // Integer -> Integer
        dto.setRewardAmount(systemConfig.getInfo3()); // info3是Integer
        // Boolean -> Boolean
        dto.setEnabledDailyLimit(systemConfig.getInfo2()); // info2是Boolean
        // Integer -> Integer
        dto.setDailyLimit(systemConfig.getInfo4()); // info4是Integer
        return dto;
    }

    /**
     * 转换为SystemConfig
     */
    public SystemConfig toSystemConfig(SystemConfig config) {
       if(Objects.nonNull(id)){
           config.setId(id);
       }
        config.setConfigType(SystemConfigType.INVITE_FRIEND);
        config.setConfigName(SystemConfigType.INVITE_FRIEND.getDesc());

        // Boolean类型匹配info1/info2
        config.setInfo1(this.enabled); // 是否赠送（Boolean → info1）
        config.setInfo2(this.enabledDailyLimit); // 每日上限是否启用（Boolean → info2）

        // Integer类型匹配info3/info4
        config.setInfo3(this.rewardAmount); // 奖励积分（Integer → info3）
        config.setInfo4(this.dailyLimit); // 每日上限（Integer → info4）

        return config;
    }
}